package top.wfzzq.ds.sort;

/**
 * 相等性測試的演示
 * 
 * @author wanghui
 *
 */
public class EqDemo {


	public static void main(String[] args) {
		// 只要是通過new關鍵字創建的對象==測試就一定是false
		// equals是用來判斷對象的值是否相同
		// ==是用來判斷是否為同一個對象
		String sa = "ab";
		String sb = "ab";
		System.out.println(sa == sb);
		System.out.println(sa.equals(sb));
		System.out.println("=====================");
		String sc = new String("ab");
		String sd = new String("ab");
		System.out.println(sc == sd);
		System.out.println(sc.equals(sd));
		System.out.println("=====================");
		/**
		 * 類如果沒有覆寫equals方法，那麽是繼承自Object对象的equals方法， 而Object的equals方法就是调用的===实现
		 * 所以下面的测试都是false. 系统的数据类型对象基本上腹泻了equals,所以String的equals可以正常
		 */
		NotEqEtity e1 = new NotEqEtity(100, "abc");
		NotEqEtity e2 = new NotEqEtity(100, "abc");
		System.out.println(e1 == e2);
		System.out.println(e1.equals(e2));
		System.out.println("=====================");
		EqEntity e3 = new EqEntity(100, "abc");
		EqEntity e4 = new EqEntity(100, "abc");
		System.out.println(e3 == e4);
		System.out.println(e3.equals(e4));
		/**
		 * java规范规定：equals方法返回true的两对象的hashCode值必须是一样的 也就是说相等对象的hashCode一定是一样的
		 * 反过来不用成立，也就是hashCode相等的两个对象equals测试不一定相等 因为hashCode是一个数，通过一定的算法出来
		 * 不同对象携带的数据加上算法计算可能计算出同一个值
		 */
		System.out.println(e1.hashCode());
		System.out.println(e2.hashCode());
		System.out.println(e3.hashCode());
		System.out.println(e4.hashCode());
	}
}
